package graphviz.MetaModel;

import java.util.ArrayList;
import java.util.List;

import graphviz.MetaModel.enumeration.TypeLiaisonDot;
import utils.Utils;

/**
 * Liaison entre plusieur element DOT
 */
public class LiaisonDot 
{
	private ElementDot pere;
	private TypeLiaisonDot liaison;
	private List<TypeLiaisonDot> argumentliaison; 
	private String valLiaison;
	
	/**
	 * Constructeur par default
	 */
	public LiaisonDot() 
	{
		this.pere = null;
		this.liaison = null;
		this.argumentliaison = null;
		this.valLiaison = null;
	}
	
	/**
	 * Constructeur par recopie
	 */
	public LiaisonDot(ElementDot pere, TypeLiaisonDot liaison, String val, List<TypeLiaisonDot> argument) 
	{
		this.pere = pere;
		this.liaison = liaison;
		this.argumentliaison = argument;
		this.valLiaison = val;
	}

	/**
	 * getter and setter
	 */
	public ElementDot getPere() {return pere;}
	public void setPere(ElementDot pere) {this.pere = pere;}

	public TypeLiaisonDot getLiaison() {return liaison;}
	public void setLiaison(TypeLiaisonDot liaison) {this.liaison = liaison;}
	
	public List<TypeLiaisonDot> getArgumentLiaison() {return argumentliaison;}
	public void setArgumentLiaison(List<TypeLiaisonDot> liaison) {this.argumentliaison = liaison;}
	public void add(TypeLiaisonDot liaison)
	{
		if(this.argumentliaison == null) this.argumentliaison = new ArrayList<TypeLiaisonDot>();
		this.argumentliaison.add(liaison);
	}
	public void addAll(List<TypeLiaisonDot> liaison)
	{
		if(this.argumentliaison == null) this.argumentliaison = new ArrayList<TypeLiaisonDot>();
		this.argumentliaison.addAll(liaison);
	}
	
	public String getValLiaison() {return valLiaison;}
	public void setValLiaison(String valLiaison) {this.valLiaison = valLiaison;}
	
	/**
	 * methodes object
	 */
	public boolean equals(Object o)
	{
		if(o == null) return false;
		
		if(o instanceof LiaisonDot)
		{
			LiaisonDot objet = (LiaisonDot) o;
			
			if(!Utils.equals(this.getPere(), objet.getPere())) return false;
			if(!Utils.equals(this.getLiaison(), objet.getLiaison())) return false;
			
			return true;
		}
		return false;
	}
}
